package UI;
import java.net.InetAddress;
import java.net.UnknownHostException;


/**Questa classe implementa il pattern architetturale Proxy Factory relativamente al WFQueue Manager.
 * Il pattern Factory permette di disaccoppiare l'UI dall'implementazione del proxy di comunicazione: l'UI potrà creare un istanza del WFQueueManagerProxy, senza conoscerne i dettagli della classe stessa.
 * UI crea un istanza di WFProxyFactory e chiama su di essa il metodo getProxy(), che restituisce al chiamante l'istanza del Proxy per la comunicazione.
 *
 * @author Team5
 */
public class WFQProxyFactory {
    //PARAMETRI PRIVATI PER CONSENTIRE LA GESTIONE DA PARTE DEL FACTORY DELL'ASSEGNAZIONE DELL'INDIRIZZO DEL WFQueueManager NEL PROXY
    //ATTUALMENTE NON USATI (Indirizzi assegnati di default nel Proxy) -> VEDI COSTRUTTORE DI DEFAULT
    // HOST:PORTA(Workflow):PORTA(TrasferimentoFile)
    /**Parametro per consentire la gestione di un indirizzo diverso da quello standard.
     */
     private String addressManager="localhost:12345:12346";
     /**Parametro per consentire la gestione di un indirizzo diverso da quello standard.
     */
     private InetAddress address;
     /**Parametro per consentire la gestione di un indirizzo diverso da quello standard.
     */
     private int portWf;
     /**Parametro per consentire la gestione di un indirizzo diverso da quello standard.
     */
     private int portFile;

    /**Costruttore di default.
     * Il Factory non assegna alcun indirizzo per il Manager; ne verrà assegnato uno di default direttamente dal Proxy.
     */
    public WFQProxyFactory() {
        
    }

    /**Metodo che restituisce al chiamante il Proxy che gestisce la comunicazione.
     *
     * @return istanza di WFQueueManagerProxy: proxy per la gestione della comunicazione.
     * @throws UnknownHostException
     */
    public WFQueueManagerProxy getProxy() throws UnknownHostException{
        System.out.println("WFQProxyFactory.getProxy(): creo il WFQueueManagerProxy e lo restituisco al chiamante (UI)");
        WFQueueManagerProxy serviceManager = new WFQueueManagerProxy_UDP_PUSH();
        return serviceManager;
        
    }
    //NB: metodo previsto per la gestione di indirizzi del WFQueueManager differenti, assegnati direttamente dal Factory. Attualmente non tutilizzato.

    /**Metodo per la gestione di indirizzo non standard assegnati al Proxy dal Factory.
     *
     * @throws UnknownHostException
     */
    private void assegnaIndirizzi() throws UnknownHostException{
             address.getByName(addressManager.split(":")[0]);
             portWf=Integer.parseInt( addressManager.split(":")[1]);
             portFile=Integer.parseInt( addressManager.split(":")[2]);
    }
}
